// 给你一个长度为 n 的整数数组 nums，其中 n > 1，返回输出数组 output ，其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/product-of-array-except-self
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


// 除法，调皮
// 无法通过，因为可能存在多个0
// 强行适配
// 执行用时：
// 20 ms
// , 在所有 C++ 提交中击败了
// 88.19%
// 的用户
// 内存消耗：
// 23.2 MB
// , 在所有 C++ 提交中击败了
// 98.94%
// 的用户
#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<unordered_set>
#include<set>
#include<queue>
using namespace std;
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        long long max = 1;
        int num_zero =0;
        vector<int> res(nums.size());
        for(int i=0;i<nums.size();i++){
            if(nums[i]==0){
                num_zero++;
            }
            else{
                max = max * nums[i];
            }
        }
        for(int i =0;i<nums.size();i++){
            if(num_zero >1){
                res[i] = 0;
            }
            else if(num_zero==1){
                if(nums[i]==0){
                    res[i] = max;
                }
                else{
                    res[i] = 0;
                }
            }
            else{
                res[i] = max/nums[i];
            }
        }
        return res;
    }
};